{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "D7V_D9IVAnO5"
   },
   "source": [
    "# 一、库导入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "gtWc9q2SCmhp"
   },
   "outputs": [],
   "source": [
    "# %%writefile AI/fastai_code/lib/imports.py\n",
    "\n",
    "from fastai.vision import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "QarDvTwIAs6Z"
   },
   "source": [
    "# 二、环境配置"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "4SCz4JYgT0r3"
   },
   "source": [
    "## 自动导入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "vHYLokzSToie"
   },
   "outputs": [],
   "source": [
    "%reload_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Zq2d6b16AvIR"
   },
   "source": [
    "## 代码下载"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "nzsr7IkgA0nz"
   },
   "source": [
    "git配置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "eWHw_SAzmSor"
   },
   "outputs": [],
   "source": [
    "!git config --global user.name whghcyx\n",
    "!git config --global user.email whghcyx@outlook.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "LFtv7M86A4qI"
   },
   "source": [
    "代码下载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 136
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 17156,
     "status": "ok",
     "timestamp": 1581753388914,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "m7TZKDDro_iZ",
    "outputId": "c97394ff-1724-4de0-de5f-f9d12d5f9e0e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cloning into 'Pytorch-RetinaNet'...\n",
      "remote: Enumerating objects: 321, done.\u001b[K\n",
      "remote: Counting objects: 100% (321/321), done.\u001b[K\n",
      "remote: Compressing objects: 100% (253/253), done.\u001b[K\n",
      "remote: Total 321 (delta 129), reused 123 (delta 51)\n",
      "Receiving objects: 100% (321/321), 7.28 MiB | 1.47 MiB/s, done.\n",
      "Resolving deltas: 100% (129/129), done.\n"
     ]
    }
   ],
   "source": [
    "!git clone https://gitee.com/whghcyx/Pytorch-RetinaNet.git"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "uq9DjOYcBANg"
   },
   "source": [
    "配置地址"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wedL0ogisc-b"
   },
   "outputs": [],
   "source": [
    "!git remote set-url origin git@github.com:whghcyx/Pytorch-RetinaNet.git"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "DJ5J-MC2BDIu"
   },
   "source": [
    "代码上传"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 306
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 18048,
     "status": "ok",
     "timestamp": 1581769790324,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "_kebYFn6p_E4",
    "outputId": "50952b18-86a5-4663-ba9e-d231ea86afc4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[master 85ed87d] colab code 0\n",
      " 8 files changed, 44 insertions(+), 2 deletions(-)\n",
      " create mode 100644 AI/fastai_code/dataloader/classify_dataloader.py\n",
      " create mode 100644 AI/fastai_code/dataprocess/cat_dog.py\n",
      " create mode 100644 AI/fastai_code/detect/class_detect_any.py\n",
      " create mode 100644 AI/fastai_code/detect/class_detect_one.py\n",
      " create mode 100644 AI/fastai_code/lib/imports.py\n",
      " create mode 100644 AI/fastai_code/models/model_all.py\n",
      " create mode 100644 AI/fastai_code/trainval/class_train.py\n",
      "Counting objects: 18, done.\n",
      "Delta compression using up to 2 threads.\n",
      "Compressing objects: 100% (11/11), done.\n",
      "Writing objects: 100% (18/18), 1.74 KiB | 1.74 MiB/s, done.\n",
      "Total 18 (delta 2), reused 0 (delta 0)\n",
      "remote: Powered by \u001b[01;33mGITEE.COM \u001b[0m[\u001b[01;35mGNK-3.8\u001b[0m]\u001b[0m\u001b[K\n",
      "To https://gitee.com/whghcyx/Pytorch-RetinaNet.git\n",
      "   083e865..85ed87d  master -> master\n"
     ]
    }
   ],
   "source": [
    "!git add . --all\n",
    "!git commit -m \"colab code 0\"\n",
    "!git push https://whghcyx:jiayou2017@gitee.com/whghcyx/Pytorch-RetinaNet.git --all"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "7kKAd7oVB9ya"
   },
   "source": [
    "## 改变运行目录"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "21CwL9roCEbz"
   },
   "outputs": [],
   "source": [
    "%cd Pytorch-RetinaNet"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "XdKc0PuMWYlm"
   },
   "source": [
    "## 建立文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "182DJHn8Wctc"
   },
   "outputs": [],
   "source": [
    "!mkdir AI/fastai_code/detect\n",
    "!echo \"32\" > AI/fastai_code/detect/class_detect_any.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "94DkSI-QVRrW"
   },
   "source": [
    "# 三、数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 18946,
     "status": "ok",
     "timestamp": 1581774939972,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "z7rCtb5OWCTu",
    "outputId": "40632764-19ec-4710-8fb0-8673b01efc1f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading http://files.fast.ai/data/examples/cifar10\n"
     ]
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# %%writefile AI/fastai_code/dataprocess/cat_dog.py\n",
    "# 猫狗图片\n",
    "# path = untar_data(URLs.DOGS)\n",
    "# CIFIAR图片\n",
    "path = untar_data(URLs.CIFAR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "dk31fIA2VWgH"
   },
   "source": [
    "# 四、数据加载器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 68
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 3260,
     "status": "ok",
     "timestamp": 1581774958753,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "Uv2PQiPHXbSz",
    "outputId": "99dc3317-2109-4d9d-b281-8983e2b6a80b"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.6/dist-packages/fastai/data_block.py:457: UserWarning: Your validation set is empty. If this is by design, use `split_none()`\n",
      "                 or pass `ignore_empty=True` when labelling to remove this warning.\n",
      "  or pass `ignore_empty=True` when labelling to remove this warning.\"\"\")\n"
     ]
    }
   ],
   "source": [
    "# %%writefile AI/fastai_code/dataloader/classify_dataloader.py\n",
    "\n",
    "# 读取图片目录，适用于目标分类\n",
    "data = ImageDataBunch.from_folder(path, ds_tfms=get_transforms(), size=224).normalize(imagenet_stats)\n",
    "# 进行图片显示\n",
    "# data.show_batch(rows=4)\n",
    "# 数据的位置\n",
    "# data.train_ds\n",
    "# 数据的批处理大小\n",
    "# data.batch_size\n",
    "# 数据的标签\n",
    "# data.classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 51
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 824,
     "status": "ok",
     "timestamp": 1581770129761,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "Qlz_mHJf2Cen",
    "outputId": "3c6af35a-4e40-4598-8604-851f17268162"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[PosixPath('/root/.fastai/data/cifar10/models/stage2-clas.pth'),\n",
       " PosixPath('/root/.fastai/data/cifar10/models/tmp.pth')]"
      ]
     },
     "execution_count": 149,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path.ls()[3].ls()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "cP1cOE0VVYM_"
   },
   "source": [
    "# 五、模型建立"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "N0PIOqONZxeG"
   },
   "outputs": [],
   "source": [
    "# %%writefile AI/fastai_code/models/model_all.py\n",
    "# 模型定义\n",
    "model = models.resnet34\n",
    "# model = models.resnet50"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "cHmoq4vQVbxv"
   },
   "source": [
    "# 六、模型训练与验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 146,
     "referenced_widgets": [
      "e865369f841a4c3bab6e84a552d03ec6",
      "554d11807b77497db2a92360326ddf0b",
      "665d3bd58e5c4599b9978fc103e97795",
      "9901edddac3a4aaab11b2cfdd95b60e9",
      "22fced5436024fa3b9ef2da05a6489a7",
      "18b6ec22b84d4fc693175b6fe1ddbebe",
      "1f9d3302926743c3a5c1de353c49ac24",
      "5329b1f0447147e6b2e2342de65dd647"
     ]
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 299523,
     "status": "ok",
     "timestamp": 1581775292202,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "beYYXJHoZ_Ty",
    "outputId": "f3fd8382-45e6-4273-a5b6-a9485205b53d"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading: \"https://download.pytorch.org/models/resnet34-333f7ec4.pth\" to /root/.cache/torch/checkpoints/resnet34-333f7ec4.pth\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e865369f841a4c3bab6e84a552d03ec6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(IntProgress(value=0, max=87306240), HTML(value='')))"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: left;\">\n",
       "      <th>epoch</th>\n",
       "      <th>train_loss</th>\n",
       "      <th>valid_loss</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.466668</td>\n",
       "      <td>#na#</td>\n",
       "      <td>04:44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# %%writefile AI/fastai_code/trainval/class_train.py\n",
    "# 定义训练的函数\n",
    "learn = cnn_learner(data, model, metrics=accuracy)\n",
    "# 训练一次\n",
    "# learn.fit_one_cycle(1)\n",
    "# 以0.01的学习率 学习1次\n",
    "learn.fit(1, 0.01) \n",
    "# 查看最优的学习率并学习一次\n",
    "# learn.lr_find()\n",
    "\n",
    "# learn.fit(3, 1e-2, cycle_len=1 ) \n",
    "# 模型保存  path/models/\n",
    "# learn.save('stage2-clas')\n",
    "# 模型导入\n",
    "# learn.load('stage1-clas')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "VOwbUteHxF6y"
   },
   "outputs": [],
   "source": [
    "img = learn.data.train_ds[0][0]\n",
    "out = learn.predict(img)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 51
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 2557,
     "status": "ok",
     "timestamp": 1581775923847,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "rZeeOdoKLVz0",
    "outputId": "01bc772d-36f5-4507-a23f-cb53b8e47e5c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.000009, 1.00015 , 1.      , 1.      , 1.      , 1.      , 1.      , 1.000002, 1.000001, 2.717838],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 27,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.exp(out[2].numpy())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "B6eBPFDfVe4s"
   },
   "source": [
    "# 七、模型单项测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 165
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 2532,
     "status": "error",
     "timestamp": 1581768058178,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "p_14-PGLe44a",
    "outputId": "0f76a15f-e813-4e90-9f52-1624488781d5"
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "ignored",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-119-22d106236929>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m: 'ImageDataBunch' object does not support indexing"
     ]
    }
   ],
   "source": [
    "# %%writefile AI/fastai_code/detect/class_detect_one.py\n",
    "# 模型的单个测试\n",
    "learn.predict(data[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xtuplsIgVi42"
   },
   "source": [
    "# 八、模型多项测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 623,
     "status": "ok",
     "timestamp": 1581766822889,
     "user": {
      "displayName": "宏沉一笑",
      "photoUrl": "",
      "userId": "12018462559157601606"
     },
     "user_tz": -480
    },
    "id": "4OZhoXNRfK0b",
    "outputId": "bcc71e9b-40b2-48fe-f0d6-a798173a360c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Overwriting AI/fastai_code/detect/class_detect_any.py\n"
     ]
    }
   ],
   "source": [
    "%%writefile AI/fastai_code/detect/class_detect_any.py\n",
    "# 冻结模型\n",
    "learn.unfreeze()\n",
    "learn.fit_one_cycle(1, slice(1e-5,3e-4), pct_start=0.05)\n",
    "\n",
    "# 测试模型的准确率\n",
    "accuracy(*learn.TTA())"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "authorship_tag": "ABX9TyMaV0vH44/bMEVGGJbkchjP",
   "collapsed_sections": [],
   "name": "FasiAI-Code",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "18b6ec22b84d4fc693175b6fe1ddbebe": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1f9d3302926743c3a5c1de353c49ac24": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "22fced5436024fa3b9ef2da05a6489a7": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "5329b1f0447147e6b2e2342de65dd647": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "554d11807b77497db2a92360326ddf0b": {
     "model_module": "@jupyter-widgets/base",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "665d3bd58e5c4599b9978fc103e97795": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "IntProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "IntProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_18b6ec22b84d4fc693175b6fe1ddbebe",
      "max": 87306240,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_22fced5436024fa3b9ef2da05a6489a7",
      "value": 87306240
     }
    },
    "9901edddac3a4aaab11b2cfdd95b60e9": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5329b1f0447147e6b2e2342de65dd647",
      "placeholder": "​",
      "style": "IPY_MODEL_1f9d3302926743c3a5c1de353c49ac24",
      "value": "100% 83.3M/83.3M [00:00&lt;00:00, 211MB/s]"
     }
    },
    "e865369f841a4c3bab6e84a552d03ec6": {
     "model_module": "@jupyter-widgets/controls",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_665d3bd58e5c4599b9978fc103e97795",
       "IPY_MODEL_9901edddac3a4aaab11b2cfdd95b60e9"
      ],
      "layout": "IPY_MODEL_554d11807b77497db2a92360326ddf0b"
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
